#include <iostream>

/**
 * n进制转十进制
 * 用公式 y = a1*10^(n-1)+a2*10^(n-2)+ ... + an*10^(0)
 * @param n 给出的n进制数
 */
int ntodec(int n)
{
    int octNum = n;
    printf("octNum=%o\n",octNum); //这里只测试八进制
    int decNum;
    while(octNum !=0 ) {
        decNum = decNum + (octNum % 10) * 10;  // octNu%10 得到个位数，每次乘以10可得到10的n次方
        octNum /= 10; // 扔掉个位数
    }
    printf("decNum=%d\n",decNum);
    return decNum;
}

//将P进制转10进制
/*
int a[N]
for(int i=0; i<len; i++) {
// P 代表进制，下面这行实现 y = a1*10^(n-1)+a2*10^(n-2)+ ... + an*10^(0)
d = d*P + a[i];
}
 */

/**
 * 十进制转m进制,用除P取余法
 * @param dec 给出的十进制数
 * @param p 进制
 */
void dectom(int dec, int p)
{
    const int P = p; //假设现在要将10进制数转为16进制数
    int decNum = dec;
    //int hexNum;
    // 辗转相除法，每次除以P，记录余数，直到商为0
    int tmp[32];
    int index=0;
    do {
        tmp[index++]=decNum % P;
        decNum /= P;
    } while(decNum != 0);

    printf("hexNum=");
    for(int i=index-1; i>=0; i--) {
        printf("%x",tmp[i]);
    }
}

/**
 * 将n进制数转为p进制，要经过两步，先转十进制，再转p进制
 * @param n n进制数
 * @param p p进制
 */
void ntop(int n,int p)
{
    int dec = ntodec(n);
    dectom(dec,p);
}

int main() {
    //ntodec(05657);
    //dectom();
    ntop(05657,16);
    return 0;
}